from math import sin,cos,pi
import turtle as t
太极半径 = R = 150

#若图像不协调，可手动调整下面两个参数
画爻点到圆周距离 = d = R/2
八卦向外扩张移动参数 = e = R/5

阴鱼 = 阳鱼 = r = R/2
鱼眼半径 = yang_circle_r = yin_circle_r = R/6
阴鱼眼圆心 = yin = (0,-2*R/3)
阳鱼眼圆心 = yang = (0,R/3)
画爻旋转初始角度 = j = -90
画爻点初始角度 = jd = pi/16
取卦初始序号 = k = 0
爻长 = a = 2*(R+d)*sin(pi/16)
爻宽 = a/5
爻间距= a/15
阴半爻长 = 7*a/15
阴半爻间距 = a/15
八卦信息列表 = bagua = [	(0,1,1),#兑
						(0,0,0),#坤
						(1,0,1),#离
						(1,1,0),#巽
						(0,0,1),#震
						(1,0,0),#艮
						(0,1,0),#坎
						(1,1,1) #乾
					  ]
#画笔速度（1-10，由慢到快）
t.speed(10)

def 太极图():
	t.pu()
	t.goto(0,-R)
	t.pd()
	t.fillcolor('black')
	t.begin_fill()
	t.circle(R,-180)
	t.circle(r,-180)
	t.circle(-r,-180)
	t.end_fill()
	t.circle(-R,-180)
	t.pu()
	t.fillcolor('white')
	t.begin_fill()
	t.goto(yang)
	t.circle(yang_circle_r)
	t.end_fill()
	t.pu()
	t.goto(yin)
	t.pd()
	t.fillcolor('black')
	t.begin_fill()
	t.circle(yin_circle_r)
	t.end_fill()

def 阳爻():
	t.begin_fill()
	t.fd(a)
	t.rt(90)
	t.fd(a/5)
	t.rt(90)
	t.fd(a)
	t.rt(90)
	t.fd(a/5)
	t.end_fill()

def 阴爻():
	# 绘制阴爻前半爻
	t.begin_fill()
	t.fd(2*a/5+a/15)
	t.rt(90)
	t.fd(a/5)
	t.rt(90)
	t.fd(2*a/5+a/15)
	t.rt(90)
	t.fd(a/5)
	t.end_fill()
	#半爻间衔接
	t.rt(90)
	t.pu()
	t.fd(2*a/5+2*a/15)
	t.pd()
	# 绘制阴爻后半爻
	t.begin_fill()
	t.fd(2*a/5+a/15)
	t.rt(90)
	t.fd(a/5)
	t.rt(90)
	t.fd(2*a/5+a/15)
	t.rt(90)
	t.fd(a/5)
	t.end_fill()
	# 回阴爻起点
	t.lt(90)
	t.pu()
	t.fd(2*a/5+2*a/15)
	t.rt(90)

def 画卦(g):
	if g[0] == 1:
		阳爻()
	else:
		阴爻()
	t.rt(180)
	t.pu()
	t.fd(a/5+a/15)
	t.pd()
	t.lt(90)
	if g[1] == 1:
		阳爻()
	else:
		阴爻()
	t.rt(180)
	t.pu()
	t.fd(a/5+a/15)
	t.pd()
	t.lt(90)	
	if g[2] == 1:
		阳爻()
	else:
		阴爻()
#绘图开始
太极图()
#八卦绘制
for i in range(0,8):
	t.pu()
	t.goto((R+d)*cos(jd),(R+d)*sin(jd))	
	t.seth(j+90)
	t.fd(e)
	t.pd()
	t.seth(j)
	画卦(bagua[k])
	j += 45
	jd += pi/4
	k += 1	
t.done()